package com.cnebula.openapi.auth.service;

import java.util.Map;

import com.cnebula.openapi.auth.exception.SignException;
import com.cnebula.openapi.auth.exception.SignExpireException;
import com.cnebula.openapi.auth.exception.SignIllegalException;

/**
 * 请求参数签名服务
 *
 */
public interface SignService {
	
	
	/**
	 * 生成签名
	 * 
	 * @param params 签名的参数列表
	 * @param secret 签名密钥
	 * @return 签名
	 * @throws SignException 签名异常
	 */
	public String sign(Map<String, String> params, String secret) throws SignException;
	
	/**
	 * 
	 * @param params 签名参数列表
	 * @param secret 签名密钥
	 * @param signature 待验证的签名 
	 * @return 200 验证成功
	 * @throws SignException 签名异常
	 * @throws SignIllegalException 非法的签名
	 */
	public Integer check(Map<String, String> params, String secret, String signature) throws SignException, SignIllegalException;

	/**
	 * 
	 * @param params 签名参数列表
	 * @param secret 签名密钥
	 * @param timestamp 签名时间
	 * @param signature 待验证的签名 
	 * @return 200 验证成功
	 * @throws SignException 签名异常
	 * @throws SignIllegalException 非法的签名
	 * @throws SignExpireException 过期的签名
	 */
	public Integer check(Map<String, String> params, String secret, long timestamp, String signature) throws SignException, SignIllegalException, SignExpireException;

}
